package com.tedu.api.list;

import org.junit.Test;
/**
 * 导入包文体：同一包下的类需要导入
 *            import java.util.ArrayList；
 *            import java.util.List;
 * 通配符   *    匹配当前包【文件夹】下所有类
 * import  java.util.*;
 */
import java.util.*;

import java.util.ArrayList;
import java.util.List;

/**
 * List集合
 * Collection顶级集合接口【容器】-------List集合【子接口】
 * List集合存储数据：存储有序并且重复的元素
 * List集合---接口---无法创建对象
 * 实现类：
 * ArrayList：【常用：List与ArrayList的方法完全一致】数组实现
 * LinkedList：双向链接实现
 * Vector：
 * 重点：掌握List集合当中所有的方法
 *
 */
public class ListAPI {
    /**
     * get( int index)    返回值：E  ---理解：Object
     * 作用：获取给定下标处的元素，从0开始
     */
    @Test
    public void testGet(){
        //List集合 ---多态创建集合
        List<String>list=new ArrayList<>();
        list.add("三生三世");
        list.add("你的名字");
        list.add("抓娃娃");
        System.out.println("List集合："+list);
        //获取到：List集合中元素叫：你的名字
        String str= list.get(1);
        System.out.println("获取集合中："+str);
        //需求：获取List集合中所有的元素
        for (int i=0;i<list.size();i++){//针对集合----下标：从0开始
          str=list.get(i);
          System.out.println("遍历List集合："+str);
        }
    }

    /**
     * set(int index,E e) 返回值：E
     * 作用：将给定元素设置到指定的下标位置处
     */
    @Test
    public void testSet(){
        List<String>list=new ArrayList<>();
        //Collection提供add方法 | List 提供add方法  【重写】
        list.add("三生三世");
        list.add("你的名字");
        list.add("抓娃娃");
        //需求：List集合中元素 你的名字  改为  749局
        list.set(1,"749局");
        System.out.println("修改后List集合："+list);
    }

    /** List继承Collection【重载：拓展功能】
     * add（int index，E e）   返回值：void
     * 作用：将给定元素插入指定位置
     * remove（int  index）   返回值：E
     * 作用：将给定位置的元素从集合中删除
     *
     * 特点：查询快，增删慢--选择List/ArrayList
     */
    @Test
    public void testAR(){
        List<String>list=new ArrayList<>();
        list.add("夯大力");list.add("白晶晶");
        list.add("布莱恩");list.add("高文杰");
        System.out.println("list集合元素："+list);
        list.add(3,"王浩");
        System.out.println("List集合元素："+list);
        list.remove(2);
        System.out.println("List集合元素："+list );
    }

    /**
     * List集合
     * subList(int start,int end)   返回值：E
     * 作用：截取范围内子集  口诀：含头不含尾
     */
    @Test
    public void testSubList() {
        //创建集合：10个元素，0-9
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {//i 循环针对下标
            list.add(i);
        }
        System.out.println("List集合：" + list);
        //获取子类：list集合元素中3-8之间元素
        List<Integer>listch=list.subList(3, 9);
        System.out.println("获取子集：" +listch);
        System.out.println("List集合：" + list);
        //获取子集：list集合元素中2-6之间元素，子集元素扩大10倍
        //1.从List集合中，取2-6之前元素
        List<Integer>lch=list.subList(2,7);
        //2.for循环遍历子集，遍历同时给每个下标的元素*10
        for(int i=0;i<lch.size();i++){//1.获取下标  0-4
            lch.set(i,lch.get(i)*10);
        }
        System.out.println("子集扩大10倍元素:"+lch);
        System.out.println("[List]"+list);
        lch.clear();
        System.out.println("清空子集：【List】"+list);
    }

    /**
     * 集合排序
     * Random     伪随机数类   包位置：java.util
     * nextInt（数值）  返回一个伪随机整数【范围：0~数值】
     * Collections 集合工具类  静态方法：sort
     * sort（）方法：针对集合元素是数值进行排序【默认：升序】！ 返回值：List
     * 需求：随机生成10个元素【整数：100以内】的集合---对集合排序
     */
    @Test
    public void testArrayList(){
        //创建List集合<整数>
        List<Integer>list=new ArrayList<>();
        //创建伪随机数
        Random r=new Random();
        for(int i=0;i<10;i++){//  10个元素
            list.add(r.nextInt(100));//100以内
        }
        System.out.println("打印List："+list);
        //对list集合元素惊醒排序 Collections.sort（集合）
        Collections.sort(list);
        System.out.println("[有排序]打印List"+list);
    }
    /**
     * 需求：创建集合，存汉子，排序--能拍【没规则】
     * sort（集合，Comparator）  重载功能：拓展排序的功能
     * 集合：排序集合
     * Comparator比较器接口：制定规则--【定规则：按照字符串长短排序】
     * 重写：compare（）--定义比较规则，默认自带交换
     */
    @Test
    public void testCompartor(){
        //创建集合--存：汉字
        List<String>list=new ArrayList<>();
        list.add("阿西吧");
        list.add("八嘎");
        list.add("西八");
        //比较器接口规则定义：按照字符串长短进行排序
        Comparator<String> com=new Comparator<String>(){
            //compare方法：针对集合【自定义】排序
            //参数：泛型：Object o1    集合当中第一【交换】个元素
            //参数2：泛型：Object o2    集合当中第二【交换】个元素
            public int compare(String o1, String o2) {

                /**
                 * 返回值  大于0   4-2   交换
                 * 返回值  小于0  3-4  不交换
                 * 返回值  等于0  2-2   不变
                 */
                return o1.length()-o2.length();
            }
        };
        Collections.sort(list,com);
        System.out.println("排序后集合"+list);
    }
}






















